// pages/profile/edit.js - 个人资料编辑页面
const { api } = require('../../utils/api');

Page({
  data: {
    userInfo: {
      nickName: '',
      email: '',
      phonenumber: '',
      sex: '0',
      avatar: ''
    },
    sexOptions: [
      { label: '未知', value: '0' },
      { label: '男', value: '1' },
      { label: '女', value: '2' }
    ],
    selectedSexIndex: 0,
    loading: false,
    hasChanges: false
  },

  onLoad() {
    console.log('个人资料编辑页面加载');
    this.loadUserProfile();
  },

  // 加载用户信息
  loadUserProfile() {
    wx.showLoading({ title: '加载中...' });
    
    api.user.getProfile()
      .then(res => {
        wx.hideLoading();
        if (res.code === 200 && res.data) {
          const userData = res.data;
          const sexIndex = this.data.sexOptions.findIndex(opt => opt.value === userData.sex);
          
          this.setData({
            userInfo: {
              nickName: userData.nickName || '',
              email: userData.email || '',
              phonenumber: userData.phonenumber || '',
              sex: userData.sex || '0',
              avatar: userData.avatar || 'https://design.gemcoder.com/staticResource/echoAiSystemImages/f393f5c29478a7b382748e71c1d68ebb.png'
            },
            selectedSexIndex: sexIndex >= 0 ? sexIndex : 0
          });
        } else {
          wx.showToast({
            title: res.msg || '加载失败',
            icon: 'none'
          });
        }
      })
      .catch(err => {
        wx.hideLoading();
        console.error('加载用户信息失败', err);
        wx.showToast({
          title: '加载失败,请重试',
          icon: 'none'
        });
      });
  },

  // 昵称输入
  onNickNameInput(e) {
    this.setData({
      'userInfo.nickName': e.detail.value,
      hasChanges: true
    });
  },

  // 邮箱输入
  onEmailInput(e) {
    this.setData({
      'userInfo.email': e.detail.value,
      hasChanges: true
    });
  },

  // 手机号输入
  onPhoneInput(e) {
    this.setData({
      'userInfo.phonenumber': e.detail.value,
      hasChanges: true
    });
  },

  // 性别选择
  onSexChange(e) {
    const index = parseInt(e.detail.value);
    this.setData({
      selectedSexIndex: index,
      'userInfo.sex': this.data.sexOptions[index].value,
      hasChanges: true
    });
  },

  // 选择头像（兼容：从相册/相机选择）
  chooseAvatar() {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        const tempFilePath = res.tempFilePaths[0];
        // 同样走上传流程
        this.uploadAvatarToServer(tempFilePath);
      },
      fail: (err) => {
        console.error('选择头像失败', err);
      }
    });
  },

  // 新：头像昵称填写能力 - 选择头像（推荐方式）
  onChooseAvatar(e) {
    try {
      const { avatarUrl } = e.detail || {};
      if (!avatarUrl) return;
      
      // 立即上传到后端
      this.uploadAvatarToServer(avatarUrl);
    } catch (err) {
      console.error('onChooseAvatar 解析失败', err);
    }
  },

  // 上传头像到服务器
  uploadAvatarToServer(tempFilePath) {
    const { getBaseUrl } = require('../../utils/api');
    const token = wx.getStorageSync('token');
    
    if (!token) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      return;
    }

    wx.showLoading({ title: '上传中...', mask: true });

    wx.uploadFile({
      url: getBaseUrl() + '/user/wechat/login/avatar',
      filePath: tempFilePath,
      name: 'avatarfile', // 后端接收的参数名
      header: {
        'Authorization': token
      },
      success: (res) => {
        wx.hideLoading();
        try {
          const data = JSON.parse(res.data);
          if (data.code === 200) {
            // 后端返回的头像 URL
            const avatarUrl = data.data || data.url;
            this.setData({
              'userInfo.avatar': avatarUrl,
              hasChanges: true
            });
            wx.showToast({ title: '头像已上传', icon: 'success' });
          } else {
            wx.showToast({ title: data.msg || '上传失败', icon: 'none' });
          }
        } catch (e) {
          console.error('解析上传结果失败', e, res.data);
          wx.showToast({ title: '上传失败', icon: 'none' });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('上传头像失败', err);
        wx.showToast({ title: '上传失败，请重试', icon: 'none' });
      }
    });
  },

  // 验证邮箱格式
  validateEmail(email) {
    if (!email) return true; // 邮箱可以为空
    const emailReg = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailReg.test(email);
  },

  // 验证手机号格式
  validatePhone(phone) {
    if (!phone) return true; // 手机号可以为空
    const phoneReg = /^1[3-9]\d{9}$/;
    return phoneReg.test(phone);
  },

  // 保存修改
  saveProfile() {
    const { nickName, email, phonenumber, sex, avatar } = this.data.userInfo;

    // 验证昵称
    if (!nickName || nickName.trim() === '') {
      wx.showToast({
        title: '请输入昵称',
        icon: 'none'
      });
      return;
    }

    // 验证邮箱
    if (email && !this.validateEmail(email)) {
      wx.showToast({
        title: '邮箱格式不正确',
        icon: 'none'
      });
      return;
    }

    // 验证手机号
    if (phonenumber && !this.validatePhone(phonenumber)) {
      wx.showToast({
        title: '手机号格式不正确',
        icon: 'none'
      });
      return;
    }

    this.setData({ loading: true });
    wx.showLoading({ title: '保存中...' });

    // 构建提交数据(只提交后端需要的字段)
    const updateData = {
      nickName: nickName.trim(),
      email: email || '',
      phonenumber: phonenumber || '',
      sex: sex,
      avatar: avatar
    };

    api.user.updateProfile(updateData)
      .then(res => {
        wx.hideLoading();
        this.setData({ loading: false });
        
        if (res.code === 200) {
          wx.showToast({
            title: res.msg || '保存成功',
            icon: 'success',
            duration: 1500
          });

          // 更新本地存储
          const localUserInfo = wx.getStorageSync('userInfo') || {};
          wx.setStorageSync('userInfo', {
            ...localUserInfo,
            ...updateData
          });

          // 延迟返回,让用户看到成功提示
          setTimeout(() => {
            wx.navigateBack();
          }, 1500);
        } else {
          wx.showToast({
            title: res.msg || '保存失败',
            icon: 'none'
          });
        }
      })
      .catch(err => {
        wx.hideLoading();
        this.setData({ loading: false });
        console.error('保存失败', err);
        wx.showToast({
          title: err.message || '保存失败,请重试',
          icon: 'none'
        });
      });
  },

  // 取消编辑
  cancelEdit() {
    if (this.data.hasChanges) {
      wx.showModal({
        title: '提示',
        content: '您有未保存的修改,确定要离开吗?',
        success: (res) => {
          if (res.confirm) {
            wx.navigateBack();
          }
        }
      });
    } else {
      wx.navigateBack();
    }
  }
});
